home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TeX 1995 July
/
TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO
/
macros
/
latex209
/
contrib
/
picins
/
picins.doc
< prev
next >
Wrap
Text File
|
1992-09-26
|
33KB
|
867 lines
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Autor: Joachim Bleser %
% TH Darmstadt -- Hochschulrechenzentrum %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% History: %
% %
% Version 1.0 %
% Definition von \PARPIC un \HPIC %
% %
% Version 1.1 (7.3.90) %
% Korrektur des \PICCHANGEMODUS %
% Einfuehrung einer Option DASH und OVAL fuer \PARPIC und \HPIC %
% %
% Version 1.2 (12.3.90) %
% Neue Umgebungen OVALENV und DASHENV %
% Dokumentation innerhalb der .STY-Datei %
% Korrektur der Umgebungen SHADOWENV und FRAMEENV %
% %
% Version 1.3 (2.5.90) %
% Korrektur der DASH Option von \PARPIC und \DASHENV-Umgebung %
% %
% Version 1.4 (3.8.90) %
% Ueberarbeitung aller Optionen von \PARPIC und \HPIC %
% Neue Befehle : \PICCAPTION %
% \PICHSKIP %
% %
% Version 1.4 (Dez.90 - Jan.91) %
% Dokumentation des .sty-Files %
% %
% Version 2.0 (Juni 91) %
% Ueberarbeitung und Umstrukturierung von \PARPIC und \HPIC %
% Einfuehrung einer Option BOX fuer \PARPIC und \HPIC %
% Einfuehrung eines Positionsparameters fuer \PARPIC und \HPIC %
% %
% Version 2.1 (November 91) %
% Korrektur des \X@PAR und des \PICSKIP Kommandos %
% %
% Version 3.0 (Juli 92) %
% Erweiterung der Unterschriften-Funktionalitaet %
% Korrektur von \PARPIC %
% Korrektur von \X@PAR %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% PICINS.STY enthaelt Kommandos, die die Integration von Bildern
% in Text unterstuetzen. Dies sind im Einzelnen:
%
% \parpic : Text umfliesst das Bild
% \hpic : Bilder in einem eigenen Absatz
% \picskip : beeinflusst das Umfliessen von Bildern durch Text
% \pichskip : horizontaler Abstand zwischen Bild und Text
% \shadowthickness: Schattendicke
% \dashlength: Laenge der Striche
% \boxlength: Tiefe der Box
% \piccaption: Unterschrift unter/neben das Bild
% \newcaption: Erweitertes \caption-Kommando
% \picchangemode: steuert Bildplazierung
%
% Weiterhin werden vier neue Umgebungen definiert:
% frameenv : Umrahmt den Inhalt
% shadowenv: Umrahmt den Inhalt und schattiert den Rahmen
% ovalenv : Umrahmt den Inhalt mit abgerundeten Ecken
% dashenv : Umrahmt den Inhalt mit einem gestrichelten Rahmen
%
%
\message{Option `picins' Version 3.0 Sep. 1992, TH Darmstadt/HRZ}
% Deklaration der benoetigten 'Variablen'
% Alle Variablen, die mit \d@... anfangen, enthalten Dimensionen,
% und alle Variablen, die mit \c@... anfangen, enthalten Counts
\newbox\@BILD% eine BOX zur Aufnahme des Bildinhalts
\newbox\@TEXT% und eine Box fuer die (optionale) Unterschrift
\newdimen\d@breite% Bildbreite
\newdimen\d@hoehe% Bildhoehe
\newdimen\d@xoff% Offset in x-Richtung
\newdimen\d@yoff% Offset in y-Richtung
\newdimen\d@shad% Schattendicke
\newdimen\d@dash% Strichlaenge
\newdimen\d@boxl% Boxlaenge (bzw. -tiefe)
\newdimen\d@pichskip% Raum zwischen Bild und Text bei \PARPIC
\newdimen\d@tmp
\newdimen\d@tmpa
\newdimen\d@bskip
\newdimen\hsiz@% Variable fuer original \hsize
\newdimen\p@getot@l% Variable fuer original \pagetotal
\newcount\c@breite
\newcount\c@hoehe
\newcount\c@xoff
\newcount\c@yoff
\newcount\c@pos
\newcount\c@shad
\newcount\c@dash
\newcount\c@boxl
\newcount\c@zeilen% Anzahl der einzurueckenden Zeilen bei \PARPIC
\newcount\@changemode% Flag fuer den \PICCHANGEMODE
\newcount\c@piccaption% Flag fuer Unterschrift unter/neben \parpic
\newcount\c@piccaptionpos% Wo soll die Unterschrift stehen?
\newcount\c@picpos
\newcount\c@whole% Count fuer \@wholewidth (Liniendicke)
\newcount\c@half% Haelfte von \C@WHOLE
\newcount\c@tmp
\newcount\c@tmpa
\newcount\c@tmpb
\newcount\c@tmpc
\newcount\c@tmpd
\newskip\d@leftskip
\newif\if@list \@listfalse% TRUE, wenn \PARPIC innerhalb einer LIST-Umgebung
% verwendet wird
\newif\if@offset% TRUE, wenn bei \PARPIC oder \HPIC Offset angegeben wurden,
% ansonsten FALSE
% Es folgen einige Voreinstellung (Defaults):
\c@piccaptionpos=1% Default Unterschrift unter Bild
\c@picpos=0
\d@shad=4pt% Default fuer Schattendicke
\d@dash=4pt% Default fuer gestrichelte Rahmen
\d@boxl=10pt% Default fuer Boxtiefe
\d@pichskip=1em% Default fuer Abstand zwischen Bild und Text
\@changemode=0% Default kein Wechselmodus
\def\@captype{figure}% Default fuer \piccaptype
\let\old@par=\par% \PAR-Kommando wird gerettet
% \pichskip steuert den horizontalen Abstand zwischen Bild und Text
\def\pichskip#1{\d@pichskip #1\relax}
% \shadowthickness destimmt die Schattendicke (Option [s])
\def\shadowthickness#1{\d@shad #1\relax}
% \dashlength bestimmt die Strichlaenge (Option [d])
\def\dashlength#1{\d@dash #1\relax}
% \boxlength bestimmt die Boxtiefe (Option [x])
\def\boxlength#1{\d@boxl #1\relax}
\def\picchangemode{\@changemode=1}% Einschalter fuer den Wechselmode
\def\nopicchangemode{\@changemode=0}% Ausschalter fuer den Wechselmode
\def\piccaptionoutside{\c@piccaptionpos=1}% Unterschrift unter dem Rahmen
\def\piccaptioninside{\c@piccaptionpos=2}% Unterschrift im Rahmen
\def\piccaptionside{\c@piccaptionpos=3}% Unterschrift rechts/links neben Bild
\def\piccaptiontopside{\c@piccaptionpos=4}%Unterschrift rechts/links neben Bild
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Der \piccaption-Befehl
% ======================
% Der \PICCAPTION-Befehl macht nichts anderes, als ein Makro mit
% der Kurzform und ein Makro mit der richtigen Unterschrift zu
% definieren. Die Auswertung dieser Makros erfolgt in \PARPIC.
\def\piccaption{\@ifnextchar [{\@piccaption}{\@piccaption[]}}
\def\@piccaption[#1]#2{\c@piccaption=1\def\sh@rtf@rm{#1}\def\capti@nt@xt{#2}}
% \MAKE@PICCAPTION verwendet das orginal LaTeX-Caption Kommando, um
% Unterschrift zu erzeugen. Es muss nur die Textbreite angepasst werden.
\def\make@piccaption{%
\hsiz@\d@breite% So breit darf die Unterschrift werden
\ifnum\c@piccaptionpos=2% Abhaenig von der Postion, an der die
\advance\hsiz@ -2\fboxsep% Unterschrift stehen soll, wird die Textbreite
\fi% entsprechend korrigiert.
\ifnum\c@piccaptionpos>2%
\hsiz@\hsize\advance\hsiz@-\d@breite\advance\hsiz@-\d@pichskip%
\fi%
\setbox\@TEXT=\vbox{\hsize\hsiz@\caption[\sh@rtf@rm]{\capti@nt@xt}}%
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Der \newcaption-Befehl
% ======================
% Das \piccaption-Kommando entspricht weitgehend dem LaTeX
% \caption-Kommando aus dem LATEX.TEX-File
% Dieses Kommando bewirkt, dass der Unterschriftentext linksbuendig
% untereinander steht.
\def\newcaption{\refstepcounter\@captype\@dblarg{\@newcaption\@captype}}
\long\def\@newcaption#1[#2]#3{%
\old@par%
\addcontentsline{\csname ext@#1\endcsname }{#1}%
{\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}
\begingroup\@parboxrestore\normalsize%
\@newmakecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\old@par%
\endgroup%
}
\long\def\@newmakecaption#1#2{%
\vskip 10pt%
\setbox\@tempboxa \hbox {#1: #2}%
\ifdim \wd\@tempboxa >\hsize% #1: #2\par%<-- So steht's im Orginal
\setbox0=\hbox{#1: }\dimen0=\hsize\advance\dimen0 by-\wd0
\setbox1=\vtop{\hsize=\dimen0 #2}
\hbox{\box0 \box1}
\par
\else \hbox to\hsize {\hfil \box \@tempboxa \hfil}
\fi
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Der \parpic-Befehl
% ==================
% Syntax: \parpic(breite,hoehe)(x-off,y-off)[Optionen][Position]{Bildinhalt}
% ------------------------------------------------------------------
% \parpic positioniert ein Bild an den Anfang eines neuen Absatzes.
% Neben dem Bild steht Text (das Bild wird vom Text umflossen).
% Angegeben werden muss der Bildinhalt, alle anderen Angaben sind optional.
%
% Vorgehensweise:
% Zuerst wird gefragt, ob die optionalen Parameter vorhanden sind
% Dem LaTeX-Befehl \@ifnextchar werden drei Parameter uebergeben:
% 1. das Zeichen, das als naechstes erwartet wird
% 2. die Aktion, die ausgefuehrt wird, wenn das Zeichen tatsaechlich
% erscheint
% 3. die Aktion, die ausgefuehrt wird, wenn das Zeichen nicht erscheint
% Im dritten Fall werden Defaultwerte an die Aktion uebergeben.
%
% Dann werden Bildhoehe und Bildbreite ermittelt. Wurden Offsets
% uebergeben, wird das Bild nach diesen Offsets positioniert, ansonsten
% wird nach Parameter #6 positioniert.
% Anschliessend werden die Umrahmnungsparameter ausgewertet.
% Nun wird berechnet, ob das Bild noch auf die aktuelle Seite passt,
% oder ob umgebrochen werden muss. Nun kann das Bild positioniert
% werden. Zuletzt wird die Anzahl der einzurueckenden Zeilen berechnet
% und das \par-Kommando fuer eigene Zwecke umdefiniert.
%
% Es wird getestet, ob Bildbreite und Bildhoehe explizit angegeben wurden
\def\parpic{%
\@ifnextchar ({\iparpic}{\iparpic(0pt,0pt)}
}
% Es wird getestet, ob Offsets angeben wurden.
\def\iparpic(#1,#2){%
\@ifnextchar ({\@offsettrue\iiparpic(#1,#2)}%
{\@offsetfalse\iiparpic(#1,#2)(0pt,0pt)}
}
% Es wird getestet, ob Umrahmungsoptionen angegeben wurden. Wenn nicht,
% wird ein [l] (d.h. Bild auf die linke Seite) als Default uebergeben.
\def\iiparpic(#1,#2)(#3,#4){%
\@ifnextchar [{\iiiparpic(#1,#2)(#3,#4)}{\iiiparpic(#1,#2)(#3,#4)[l]}
}
% Es wird getestet, ob Positionsparameter angegeben wurden.
\def\iiiparpic(#1,#2)(#3,#4)[#5]{%
\@ifnextchar [{\ivparpic(#1,#2)(#3,#4)[#5]}{\ivparpic(#1,#2)(#3,#4)[#5][]}
}
\def\ivparpic(#1,#2)(#3,#4)[#5][#6]#7{%
\let\par=\old@par\par%
\hangindent0pt\hangafter1% Default Einstellungen vornehmen
\setbox\@BILD=\hbox{#7}%
\d@breite=#1\d@breite=\the\d@breite% Die Bildbreite wird bestimmt
\ifdim\d@breite=0pt\d@breite=\wd\@BILD\fi%
\c@breite=\d@breite\divide\c@breite by65536%
\multiply\c@piccaption\c@piccaptionpos%
\d@hoehe=#2\d@hoehe=\the\d@hoehe% Die Bildhoehe wird bestimmt
\ifdim\d@hoehe=0pt\d@hoehe=\ht\@BILD\advance\d@hoehe by\dp\@BILD\fi%
\c@hoehe=\d@hoehe\divide\c@hoehe by65536%
\d@xoff=#3\c@xoff=\d@xoff\divide\c@xoff by65536% Der x-Offset wird berechnet
\d@yoff=\d@hoehe% Der y-Offset wird berechnet
\advance\d@yoff by-#4\c@yoff=\d@yoff\divide\c@yoff by65536%
\c@pos=1\unitlength1pt%
\if@offset% Bild wird nach den Offsets innerhalb der Rahmens positioniert
\setbox\@BILD=\hbox{%
\begin{picture}(\c@breite,\c@hoehe)%
\put(0,0){\makebox(\c@breite,\c@hoehe){}}%
\put(\c@xoff,\c@yoff){\box\@BILD}%
\end{picture}%
}%
\else% Bild wird nach Parameter #6 positioniert
\setbox\@BILD=\hbox{%
\begin{picture}(\c@breite,\c@hoehe)%
\put(0,0){\makebox(\c@breite,\c@hoehe)[#6]{\box\@BILD}}%
\end{picture}%
}%
\fi%
\ifnum\c@piccaption=2% Unterschrift in den Rahmen, unterhalb des Bildes.
\make@piccaption% Unterschrift erzeugen.
\advance\d@hoehe\ht\@TEXT\advance\d@hoehe\dp\@TEXT% 'Bild'hoehe korrigieren
\c@hoehe=\d@hoehe\divide\c@hoehe by65536%
\setbox\@BILD=\vbox{\box\@BILD\vspace{-5pt}%
\hbox{\hspace{\fboxsep}\box\@TEXT}%
\vspace{4pt}}%
\fi%
% Nun werden die Umrahmungsparameter ausgewertet
\@tfor\@tempa := #5\do{%
\if\@tempa f\setbox\@BILD=\hbox{\Rahmen(\c@breite,\c@hoehe){\box\@BILD}}\fi%
\if\@tempa s\setbox\@BILD=\hbox{\Schatten(\c@breite,\c@hoehe){\box\@BILD}}\fi%
\if\@tempa o\setbox\@BILD=\hbox{\Oval(\c@breite,\c@hoehe){\box\@BILD}}\fi%
\if\@tempa d\setbox\@BILD=\hbox{\Strich(\c@breite,\c@hoehe){\box\@BILD}}\fi%
\if\@tempa x\setbox\@BILD=\hbox{\Kasten(\c@breite,\c@hoehe){\box\@BILD}}\fi%
\if\@tempa l\c@pos=1\fi%
\if\@tempa r\c@pos=2\fi%
}%
\ifnum\c@piccaption=1% Unterschrift unterhalb des Rahmens
\make@piccaption% Unterschrift erzeugen.
\advance\d@hoehe\ht\@TEXT\advance\d@hoehe\dp\@TEXT%
\c@hoehe=\d@hoehe\divide\c@hoehe by65536% 'Bild'-hoehe korrigieren.
\setbox\@BILD=\vbox{\box\@BILD\vspace{-5pt}\hbox{\box\@TEXT}\vspace{4pt}}%
\fi%
\ifodd\count0\c@picpos=0\else\c@picpos=\@changemode\fi%
% Wenn der verbleibende vertikale Platz auf der Seite fuer das Bild
% nicht mehr ausreicht, wird ein Seitenumbruch erzwungen.
\pagetotal=\the\pagetotal%
\d@tmp=\pagegoal\advance\d@tmp by-\pagetotal\advance\d@tmp by-\baselineskip%
\ifdim\d@hoehe>\d@tmp%
\vskip 0pt plus\d@hoehe\relax\pagebreak[3]\vskip 0pt plus-\d@hoehe\relax%
\ifnum\c@picpos=1\c@picpos=0\else\c@picpos=\@changemode\fi%
\fi%
\ifnum\c@picpos=1\ifnum\c@pos=1\c@pos=2\else\c@pos=1\fi\fi%
% Wird \parpic innerhalb einer LIST-Umgebung verwendet (\@listdepth>0),
% muessen besondere Vorkehrungen getroffen werden.
\ifnum\@listdepth>0
\@listtrue\parshape 0%
\advance\hsize -\rightmargin%
\d@leftskip \leftskip%
\leftskip \@totalleftmargin%
\if@inlabel\rule{\linewidth}{0pt}\vskip-\baselineskip\relax\fi%
\else\@listfalse\medskip%
\fi%
% Soll das Bild auf der rechten Seite positioniert werden, muss der
% Betrag der Einrueckung berechnet werden.
% einrueck := akt_textbreite - bildbreite
\if@list\d@tmpa=\linewidth\else\d@tmpa=\hsize\fi%
\ifnum\c@piccaption=3% Unterschrift soll neben das Bild, vertikal zentriert
\make@piccaption%
\d@tmp\ht\@TEXT\advance\d@tmp\dp\@TEXT%
\ifdim\d@hoehe>\d@tmp%
\setbox\@TEXT=\vbox to\d@hoehe{\vfill\box\@TEXT\vspace{.2\baselineskip}\vfill}%
\else%
\setbox\@BILD=\vbox to\d@tmp{\vfill\box\@BILD\vfill}%
\d@hoehe\d@tmp%
\fi%
\fi%
\ifnum\c@piccaption=4% Unterschrift soll neben das Bild auf gleiche Hoehe
\make@piccaption%
\d@tmp\ht\@TEXT\advance\d@tmp\dp\@TEXT%\advance\d@tmp-10pt%
\setbox\@TEXT=\vbox to\d@hoehe{\vspace{-10pt}\box\@TEXT\vfil}%
\advance\d@hoehe-\d@tmp%
\fi%
\ifnum\c@pos=1\d@tmpa=0pt%
\ifnum\c@piccaption>2% Unterschrift soll neben das Bild
\setbox\@BILD=\hbox{\box\@BILD\hspace{\d@pichskip}\hbox{\box\@TEXT}}%
\fi%
\else\advance\d@tmpa by-\wd\@BILD\d@breite=-\d@breite%
\ifnum\c@piccaption>2% Unterschrift soll neben das Bild
\d@tmpa=0pt%
\setbox\@BILD=\hbox{\hbox{\box\@TEXT}\hspace{\d@pichskip}\box\@BILD}%
\fi%
\fi%
% Um den Wert von \d@bskip wird nach der Bildplazierung wieder
% nach oben zurueckgesprungen. Der Wert .3\baselineskip wurde
% empirisch ermittelt.
\p@getot@l\the\pagetotal%
\d@bskip\d@hoehe\advance\d@bskip by\parskip\advance\d@bskip by.3\baselineskip%
% Nun wird das Bild (evt. eingerueckt und) positioniert.
{\noindent\hspace*{\d@tmpa}\relax%
\box\@BILD\nopagebreak\vskip-\d@bskip\relax\nopagebreak}%
% Aus der Bildhoehe berechnet sich die Anzahl der einzurueckenden Zeilen.
% zeilen := bildhoehe / baselineskip
\d@tmp=-\d@hoehe\divide\d@tmp by\baselineskip%
\c@zeilen=\d@tmp\advance\c@zeilen by-1%
\ifdim\d@breite<0pt\advance\d@breite by-\d@pichskip%
\else\advance\d@breite by\d@pichskip%
\fi%
\hangindent=\d@breite% Der Bertag der Einrueckung.
\hangafter=\c@zeilen% Die Anzahl der einzurueckenden Zeilen.
% Die Bedeutung des \par-Kommandos wird gerettet; anschliessend wird
% \par umdefiniert.
\let\par=\x@par%
\ifnum\c@piccaption=3% In diesem Fall steht kein weiterer Text neben
\hangindent0pt\hangafter1\let\par=\old@par% dem Bild ==> vskip
\vskip\d@hoehe\vskip.2\baselineskip%
\fi%
\c@piccaption=0% Das Unterschriftenflag wird wieder geloescht
}
\newdimen\ptoti
\newdimen\ptotii
% Das \x@par-Makro
% ----------------
% Das \x@par-Makro ersetzt solange das aktuelle \par-Kommando, solange noch
% Zeilen einzuruecken sind; anschliessend erhaelt das \par-Kommando seine
% alte Bedeutung zurueck.
\def\x@par{%
\ptoti\pagetotal% Hoehe VOR dem \par-Kommando.
\old@par% \old@par entspricht dem aktuellen \par
\ptotii\pagetotal% Hoehe NACH dem \par-Kommando.
\ifdim\ptoti=\ptotii% Der Absatz enthaelt KEINE Zeile (ist leer).
\d@tmp\d@hoehe%
\else% Der Absatz enthaelt mindestens eine Zeile.
\d@tmp\baselineskip% Die Hoehe des vorangehenden Absatzes
\multiply\d@tmp by\prevgraf% wird aus der Anzahl Zeilen des Absatzes
\advance\d@tmp by\parskip% berechnet
\global\advance\d@hoehe by-\d@tmp\d@tmp=\d@hoehe%
\fi%
% Wenn die verbleibende Bildhoehe > 0pt ist, muessen noch mehr Zeilen
% eingerueckt werden.
\ifdim\d@hoehe>0pt%
\divide\d@tmp by\baselineskip\c@zeilen=-\d@tmp\advance\c@zeilen by-1%
\c@zeilen=\the\c@zeilen% Um Aenderung nach aussen sichtbar zu machen
\else\c@zeilen=0
\fi
\ifnum\c@zeilen<0\hangafter=\c@zeilen\hangindent=\d@breite%
\else\let\par=\old@par%
\hangindent 0pt%
\leftskip \d@leftskip%
\if@list\parshape \@ne \@totalleftmargin \linewidth%
\advance\hsize \rightmargin%
\fi%
\fi%
}
% Das \picskip-Makro
% ------------------
% Mit dem \picskip-Kommando kann die Anzahl der einzurueckenden Zeilen
% beeinflusst werden. Als Parameter wird die gewuenschte Anzahl von
% einzurueckenden Zeilen uebergeben. Ist diese 0, wird der verbleibende
% Platz neben dem Bild uebersprungen (\vspace*{\d@hoehe}) und der
% Text wird unterhalb des Bildes fortgesetzt.
%
\def\picskip#1{%
\let\par=\old@par%
\par%
\pagetotal\the\pagetotal%
\c@tmp=#1\relax%
\ifnum\c@tmp=0% Sprung ueber den verbleibenden Zwischenraum hinweg
\d@tmp\baselineskip\multiply\d@tmp by\prevgraf\advance\d@tmp\parskip%
\ifdim\p@getot@l<\pagetotal
\advance\d@hoehe by-\d@tmp\advance\d@hoehe by1ex%
\ifdim\d@hoehe>0pt\vspace*{\d@hoehe}\fi%
\fi%
\ifdim\p@getot@l=\pagetotal% Test auf Leerzeile
\advance\d@hoehe by-\d@tmp\advance\d@hoehe by1ex%
\ifdim\d@hoehe>0pt\vspace*{\d@hoehe}\fi%
\fi%
\else\hangafter=-\c@tmp\hangindent=\d@breite%
\fi%
\leftskip \d@leftskip%
% Wurde \PARPIC innerhalb einer LIST-Umgebung verwendet, so wird nun
% \parshape wieder gesetzt.
\if@list\parshape \@ne \@totalleftmargin \linewidth%
\advance\hsize \rightmargin%
\fi%
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Der \hpic-Befehl
% ================
% Syntax: \hpic(breite,hoehe)(x-off,y-off)[Optionen][Position]{Bildinhalt}
% ------------------------------------------------------------
% \hpic ermoeglicht das komfortable Positionieren von Bilder in einem
% eigenen Absatz; d.h. Text neben dem Bild ist nicht moeglich.
%
% Vorgehensweise:
% Zuerst werden Bildbreite und Bildhoehe sowie die Offsets bestimmt.
% Wurden Offsets uebergeben, wird das Bild nach Vorgabe positioniert,
% ansonsten nach Paramter #6. Anschliessend werden die Umrahmungs-
% parameter ausgewertet. Zuletzt wird das Bild in eine \parbox
% positioniert.
%
% Es wird getestet, ob Bildbreite und Bildhoehe explizit angegeben wurden
\def\hpic{%
\@ifnextchar ({\ihpic}{\ihpic(0pt,0pt)}
}
% Es wird getestet, ob Offsets angegeben wurden
\def\ihpic(#1,#2){%
\@ifnextchar ({\@offsettrue\iihpic(#1,#2)}%
{\@offsetfalse\iihpic(#1,#2)(0pt,0pt)}
}
% Es wird getestet, ob Umrahmungsoptionen angegeben wurden. Wenn nicht,
% wird ein [l] (d.h. Bild auf die linke Seite) als Default uebergeben.
\def\iihpic(#1,#2)(#3,#4){%
\@ifnextchar [{\iiihpic(#1,#2)(#3,#4)}{\iiihpic(#1,#2)(#3,#4)[l]}
}
% Es wird getestet, ob Positionsparameter angegeben wurden
\def\iiihpic(#1,#2)(#3,#4)[#5]{%
\@ifnextchar [{\ivhpic(#1,#2)(#3,#4)[#5]}{\ivhpic(#1,#2)(#3,#4)[#5][]}
}
\def\ivhpic(#1,#2)(#3,#4)[#5][#6]#7{%
\setbox\@BILD=\hbox{#7}%
\d@breite=#1\d@breite=\the\d@breite%
\ifdim\d@breite=0pt\d@breite=\wd\@BILD\fi%
\c@breite=\d@breite\divide\c@breite by65536%
\d@hoehe=#2\d@hoehe=\the\d@hoehe%
\ifdim\d@hoehe=0pt\d@hoehe=\ht\@BILD\advance\d@hoehe by\dp\@BILD\fi%
\c@hoehe=\d@hoehe\divide\c@hoehe by65536%
\d@xoff=#3\c@xoff=\d@xoff\divide\c@xoff by65536%
\d@yoff=\d@hoehe%
\advance\d@yoff by-#4\c@yoff=\d@yoff\divide\c@yoff by65536%
\c@pos=0\d@tmpa=\parindent\parindent=0pt\unitlength1pt%
\if@offset
\setbox\@BILD=\hbox{%
\begin{picture}(\c@breite,\c@hoehe)%
\put(0,0){\makebox(\c@breite,\c@hoehe){}}%
\put(\c@xoff,\c@yoff){\box\@BILD}%
\end{picture}%
}%
\else% Bild wird nach Parameter #6 positioniert
\setbox\@BILD=\hbox{%
\begin{picture}(\c@breite,\c@hoehe)%
\put(0,0){\makebox(\c@breite,\c@hoehe)[#6]{\box\@BILD}}%
\end{picture}%
}%
\fi%
\@tfor\@tempa := #5\do{%
\if\@tempa f\setbox\@BILD=\hbox{\Rahmen(\c@breite,\c@hoehe){\box\@BILD}}\fi%
\if\@tempa s\setbox\@BILD=\hbox{\Schatten(\c@breite,\c@hoehe){\box\@BILD}}\fi%
\if\@tempa o\setbox\@BILD=\hbox{\Oval(\c@breite,\c@hoehe){\box\@BILD}}\fi%
\if\@tempa d\setbox\@BILD=\hbox{\Strich(\c@breite,\c@hoehe){\box\@BILD}}\fi%
\if\@tempa x\setbox\@BILD=\hbox{\Kasten(\c@breite,\c@hoehe){\box\@BILD}}\fi%
\if\@tempa t\c@pos=1\fi%
\if\@tempa b\c@pos=2\fi%
}%
\ifnum\c@pos=0\parbox{\d@breite}{\makebox[0cm]{}\\\box\@BILD\smallskip}\fi%
\ifnum\c@pos=1\parbox[t]{\d@breite}{\makebox[0cm]{}\\\box\@BILD\smallskip}\fi%
\ifnum\c@pos=2\parbox[b]{\d@breite}{\makebox[0cm]{}\\\box\@BILD\smallskip}\fi%
\parindent=\d@tmpa%
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ===============
% Die Hilfsmakros
% ===============
% Die nun folgenden Makros sind nicht fuer die Verwendung
% in einem Dokument geeignet. Sie dienen den oben definierten
% 'Hauptmakros' zur Unterstuetzung.
% Das \Rahmen-Makro
% -----------------
% Mit diesem Makro wird mittels der \picture-Umgebung ein Rahmen um das
% Bild gezeichnet ==> \framebox
% Parameter:
% #1,#2: Breite und Hoehe in Punkten
% #3 : Bildinhalt
% Die Breite und Hoehe des Bildes werden zuletzt um zweimal Liniendicke
% erhoeht.
\def\Rahmen(#1,#2)#3{%
\c@whole=\@wholewidth\divide\c@whole by65536%
\c@half=\@halfwidth\divide\c@half by65536%
\c@tmpa=#1\advance\c@tmpa by\c@whole\advance\c@tmpa by\c@whole%
\c@tmpb=#2\advance\c@tmpb by\c@whole\advance\c@tmpb by\c@whole%
\begin{picture}(\c@tmpa,\c@tmpb)%
\put(\c@whole,\c@half){\framebox(#1,#2){#3}}%
\end{picture}%
\global\advance\d@breite by2\@wholewidth%
\global\advance\d@hoehe by2\@wholewidth%
}
% Das \Schatten-Makro
% -----------------
% Mit diesem Makro wird mittels der \picture-Umgebung ein Rahmen und ein
% Schatten um das Bild gezeichnet ==> \framebox + 2 \rule
% Parameter:
% #1,#2: Breite und Hoehe in Punkten
% #3 : Bildinhalt
% Die Breite und Hoehe des Bildes werden zuletzt um zweimal Liniendicke
% und einmal Schattendicke erhoeht.
\def\Schatten(#1,#2)#3{%
\c@whole=\@wholewidth\divide\c@whole by65536%
\c@half=\@halfwidth\divide\c@half by65536%
\c@shad=\d@shad\divide\c@shad by65536%
\c@tmp=\c@whole\advance\c@tmp by\c@whole\c@tmpd=\c@tmp%
\advance\c@tmp by\c@shad%
\advance\c@tmpd by#1%
\advance\c@half by\c@shad%
\c@tmpa=#1\advance\c@tmpa by\c@tmp%
\c@tmpb=#2\advance\c@tmpb by\c@tmp%
\begin{picture}(\c@tmpa,\c@tmpb)%
\put(\c@whole,\c@half){\framebox(#1,#2){#3}}%
\put(\c@shad,0){\rule{\c@tmpd pt}{\c@shad pt}}%
\put(\c@tmpd,0){\rule{\c@shad pt}{#2 pt}}%
\end{picture}%
\global\advance\d@breite by2\@wholewidth\global\advance\d@breite by\d@shad%
\global\advance\d@hoehe by2\@wholewidth\global\advance\d@hoehe by\d@shad%
}
% Das \Oval-Makro
% -----------------
% Mit diesem Makro wird mittels der \picture-Umgebung ein runder Rahmen um das
% Bild gezeichnet ==> \oval
% Parameter:
% #1,#2: Breite und Hoehe in Punkten
% #3 : Bildinhalt
\def\Oval(#1,#2)#3{%
\@wholewidth=0.4pt%
\c@tmpa=\the#1\divide\c@tmpa by2%
\c@tmpb=\the#2\divide\c@tmpb by2%
\begin{picture}(#1,#2)%
\put(\c@tmpa,\c@tmpb){\oval(#1,#2)}%
\put(0.4,0.4){#3}%
\end{picture}%
\global\advance\d@breite by1pt\global\advance\d@hoehe by1pt%
}
% Das \Strich-Makro
% -----------------
% Mit diesem Makro wird mittels der \picture-Umgebung ein gestrichelter Rahmen
% um das Bild gezeichnet ==> \dashbox
% Parameter:
% #1,#2: Breite und Hoehe in Punkten
% #3 : Bildinhalt
% Die Breite und Hoehe des Bildes werden zuletzt um zweimal Liniendicke
% erhoeht.
\def\Strich(#1,#2)#3{%
\c@whole=\@wholewidth\divide\c@whole by65536%
\c@half=\@halfwidth\divide\c@half by65536%
\c@dash=\d@dash\divide\c@dash by65536%
\c@tmp=\c@whole\advance\c@tmp by\c@whole% c@tmp = 2*c@whole
\c@tmpa=#1\advance\c@tmpa by\c@tmp%
\c@tmpb=#2\advance\c@tmpb by\c@tmp%
\c@tmpc=#1\advance\c@tmpc by\c@whole%
\c@tmpd=#2\advance\c@tmpd by\c@whole%
\begin{picture}(\c@tmpa,\c@tmpb)%
\put(\c@half,\c@half){\dashbox{\c@dash}(\c@tmpc,\c@tmpd){#3}}%
\end{picture}%
\global\advance\d@breite by2\@wholewidth%
\global\advance\d@hoehe by2\@wholewidth%
}
% Das \Kasten-Makro
% -----------------
% Mit diesem Makro wird mittels der \picture-Umgebung ein 3D-Kasten
% um das Bild gezeichnet ==> \dashbox
% Parameter:
% #1,#2: Breite und Hoehe in Punkten
% #3 : Bildinhalt
% Die Breite und Hoehe des Bildes werden zuletzt um die Kastentiefe
% erhoeht.
\def\Kasten(#1,#2)#3{%
\@wholewidth=0.4pt%
\c@boxl=\d@boxl\divide\c@boxl by65536\c@boxl=\the\c@boxl%
\c@tmpa=#1\advance\c@tmpa by\c@boxl%
\c@tmpb=#2\advance\c@tmpb by\c@boxl%
\c@tmp=#2%
\begin{picture}(\c@tmpa,\c@tmpb)%
\put(0,\c@boxl){\framebox(#1,#2){#3}}%
\put(\c@boxl,0){\line(-1,1){\c@boxl}}%
\put(\c@boxl,0){\line(1,0){#1}\line(-1,1){\c@boxl}}%
\put(\c@boxl,0){\put(#1,0){\line(0,1){\c@tmp}%
\put(0,\c@tmp){\line(-1,1){\c@boxl}}}}%
\end{picture}%
\global\advance\d@breite by\d@boxl%
\global\advance\d@hoehe by\d@boxl%
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newbox\env@box%
\newdimen\d@envdp
\newcount\c@hsize
\newcount\c@envdp
\newdimen\d@envb
% Die Umgebung FRAMEENV
% =====================
% Syntax: \begin{frameenv}[Breite] ... \end{frameenv}
% Diese Umgebung umrahmt ihren Inhalt
%
% Vorgehensweise:
% Die Textbreite (\textwidth) wird etwas verkleinert und der Umgebungs-
% inhalt in eine \vbox eingeschlossen. Dadurch erfolgt der Zeilenumbruch
% automatisch. Anschliessend wird die \vbox innerhalb einer
% 'picture'-Umgebung in eine \framebox positioniert.
%
% Zuerst wird die optionale 'Breite' abgefragt
\long\def\frameenv{\@ifnextchar [{\@frameenv}{\@frameenv[\textwidth]}}
\long\def\@frameenv[#1]{%
% \textwidth wird gerettet und anschliessend mit der 'Breite' initialisiert
\hsiz@=\textwidth \textwidth=#1 \d@envb=#1
% Damit der Text (der Inhalt) nicht bis an die Umrahmung heranreicht, wird
% die \textwidth etwas verkleinert
\advance\textwidth by-2\@wholewidth
% \fboxsep (LaTeX-Befehl) enthaelt den Abstand zwischen Text und Umrahmung
\advance\textwidth by-2\fboxsep
\hsize=\textwidth \linewidth=\textwidth
% Nun wird eine \vbox geoffnet, in die der Text geschrieben wird.
\setbox\env@box=\vbox\bgroup}%
%
\def\endframeenv{%
\egroup% Die Box wird geschlossen und alle Werte wieder zurueckgesetzen
\hsize=\hsiz@ \textwidth=\hsiz@ \linewidth=\hsiz@
\c@breite=\d@envb \divide\c@breite by65536
\advance\d@envb by-2\@wholewidth
\c@hsize=\d@envb \divide\c@hsize by65536% Breite der Box in Punkten
\d@envdp=\dp\env@box \advance\d@envdp by\ht\env@box%
\advance\d@envdp by2\fboxsep%
\d@hoehe=\d@envdp \advance\d@hoehe by2\@wholewidth
% Fuer die \picture-Umgebung werden alle Dimesionen in Punkte umgerechnet
\c@hoehe=\d@hoehe \divide\c@hoehe by65536
\c@envdp=\d@envdp \divide\c@envdp by65536%
\c@tmp=\@wholewidth \divide\c@tmp by65536
\vskip\@wholewidth% Etwas vertikaler Abstand zum vorhergehenden Text
\unitlength 1pt\noindent%
\begin{picture}(\c@breite,\c@hoehe)(0,0)
\put(\c@tmp,\c@tmp){\framebox(\c@hsize,\c@envdp){\box\env@box}}
\end{picture}%
}
% Die Umgebung SHADOWENV
% ======================
% Syntax: \begin{shadowenv}[Breite] ... \end{shadowenv}
% Diese Umgebung umrahmt und schattiert ihren Inhalt
%
% Vorgehensweise:
% Die Textbreite (\textwidth) wird etwas verkleinert und der Umgebungs-
% inhalt in eine \vbox eingeschlossen. Dadurch erfolgt der Zeilenumbruch
% automatisch. Anschliessend wird die \vbox innerhalb einer
% 'picture'-Umgebung in eine \framebox positioniert und der Schatten
% angehaengt.
%
% Zuerst wird die optionale 'Breite' abgefragt
\long\def\shadowenv{\@ifnextchar [{\@shadowenv}{\@shadowenv[\textwidth]}}
\long\def\@shadowenv[#1]{%
% \textwidth wird gerettet und anschliessend mit der 'Breite' initialisiert
\hsiz@=\textwidth \textwidth=#1 \d@envb=#1
% Damit der Text (der Inhalt) nicht bis an die Umrahmung heranreicht, wird
% die \textwidth etwas verkleinert
\advance\textwidth by-2\@wholewidth
% \fboxsep (LaTeX-Befehl) enthaelt den Abstand zwischen Text und Umrahmung
\advance\textwidth by-2\fboxsep
\advance\textwidth by-\d@shad% Korrektur um die Schattendicke
\hsize=\textwidth \linewidth=\textwidth
% Nun wird eine \vbox geoffnet, in die der Text geschrieben wird.
\setbox\env@box=\vbox\bgroup}%
%
\def\endshadowenv{%
\egroup
\hsize=\hsiz@ \textwidth=\hsiz@ \linewidth=\hsiz@
\d@tmpa=\d@envb
\c@breite=\d@envb \divide\c@breite by65536
\advance\d@envb by-2\@wholewidth \advance\d@envb by-\d@shad
\c@hsize=\d@envb \divide\c@hsize by65536%
\d@envdp=\dp\env@box \advance\d@envdp by\ht\env@box%
\advance\d@envdp by2\fboxsep%
\c@envdp=\d@envdp \divide\c@envdp by65536%
\d@hoehe=\d@envdp
% Umgebungshoehe := Texthoehe + 2*Strichdicke + Schattendicke
\advance\d@hoehe by2\@wholewidth \advance\d@hoehe by\d@shad
% Umrechnen der Dimensionen in Counts fuer die \picture-Umgebung
\c@hoehe=\d@hoehe \divide\c@hoehe by65536
\c@shad =\d@shad \divide\c@shad by65536
\c@tmp=\@wholewidth \divide\c@tmp by65536
\advance\d@tmpa by-2\d@shad
\c@xoff =\d@tmpa \divide\c@xoff by65536
\advance\c@xoff by\c@shad \advance\c@xoff by-1
\advance\d@envdp by\@wholewidth
\vskip\@halfwidth
\unitlength 1pt\noindent%
\begin{picture}(\c@breite,\c@hoehe)(0,0)
\put(\c@tmp,\c@shad){\framebox(\c@hsize,\c@envdp){\box\env@box}}
\put(\c@shad,0){\rule{\d@tmpa}{\d@shad}}% Horizontaler Schatten
\put(\c@xoff,0){\rule{\d@shad}{\d@envdp}}% Vertikaler Schatten
\end{picture}%
\vskip\@halfwidth
}
% Die Umgebung DASHENV
% ======================
% Syntax: \begin{dashenv}[Breite] ... \end{dashenv}
% Diese Umgebung umrahmt ihren Inhalt gestrichelt.
%
% Vorgehensweise:
% Die Textbreite (\textwidth) wird etwas verkleinert und der Umgebungs-
% inhalt in eine \vbox eingeschlossen. Dadurch erfolgt der Zeilenumbruch
% automatisch. Anschliessend wird die \vbox innerhalb einer
% 'picture'-Umgebung in einer \dashbox positioniert
%
% Zuerst wird die optionale 'Breite' abgefragt
\long\def\dashenv{\@ifnextchar [{\@dashenv}{\@dashenv[\textwidth]}}
\long\def\@dashenv[#1]{%
\hsiz@=\textwidth \textwidth=#1 \d@envb=#1
\advance\textwidth by-2\@wholewidth \advance\textwidth by-2\fboxsep
\hsize=\textwidth \linewidth=\textwidth
\setbox\env@box=\vbox\bgroup}%
%
\long\def\enddashenv{%
\egroup
\hsize=\hsiz@ \textwidth=\hsiz@ \linewidth=\hsiz@
\c@breite=\d@envb \divide\c@breite by65536
\advance\d@envb by-\@wholewidth
\c@hsize=\d@envb \divide\c@hsize by65536%
\d@envdp=\dp\env@box \advance\d@envdp by\ht\env@box%
\advance\d@envdp by2\fboxsep%
\advance\d@envdp by\@wholewidth
\d@hoehe=\d@envdp \advance\d@hoehe by2\@wholewidth
\c@hoehe=\d@hoehe \divide\c@hoehe by65536
\c@envdp=\d@envdp \divide\c@envdp by65536% Hoehe der Box in Punkten
\c@dash=\d@dash \divide\c@dash by65536% Strichlaenge in Punkten
\c@whole=\@wholewidth \divide\c@whole by65536
\c@half=\@halfwidth \divide\c@half by 65536
\noindent\unitlength 1pt
\begin{picture}(\c@breite,\c@hoehe)(0,0)
\put(\c@half,\c@whole){\dashbox{\c@dash}(\c@hsize,\c@envdp){\box\env@box}}
\end{picture}%
}
% Die Umgebung OVALENV
% ======================
% Syntax: \begin{ovalenv}[Breite] ... \end{ovalenv}
% Diese Umgebung umrahmt ihren Inhalt mit abgerundeten Ecken.
%
% Vorgehensweise:
% Die Textbreite (\textwidth) wird etwas verkleinert und der Umgebungs-
% inhalt in eine \vbox eingeschlossen. Dadurch erfolgt der Zeilenumbruch
% automatisch. Anschliessend wird die \vbox innerhalb einer
% 'picture'-Umgebung in einem \oval positioniert.
%
%
% Zuerst wird die optionale 'Breite' abgefragt
\long\def\ovalenv{\@ifnextchar [{\@ovalenv}{\@ovalenv[\textwidth]}}%
\long\def\@ovalenv[#1]{%
\hsiz@=\textwidth \textwidth=#1 \d@envb=#1
% \fboxsep (LaTeX-Befehl) enthaelt den Abstand zwischen Text und Umrahmung
\advance\textwidth by-4\fboxsep
\hsize=\textwidth \linewidth=\textwidth
\setbox\env@box=\vbox\bgroup}%
%
\long\def\endovalenv{%
\egroup
\hsize=\hsiz@ \textwidth=\hsiz@ \linewidth=\hsiz@
\@wholewidth=0.4pt
\c@breite=\d@envb \divide\c@breite by65536
\advance\d@envb by-2\@wholewidth
\c@hsize=\d@envb \divide\c@hsize by65536% Breite des Ovals in Punkten
\d@envdp=\dp\env@box \advance\d@envdp by\ht\env@box%
\advance\d@envdp by4\fboxsep%
\c@envdp=\d@envdp \divide\c@envdp by65536%
\d@hoehe=\d@envdp \advance\d@hoehe by2\@wholewidth
\c@hoehe=\d@hoehe \divide\c@hoehe by65536
\c@tmpa=\c@hsize \divide\c@tmpa by2% Der Mittelpunkt des Ovals ist die
\c@tmpb=\c@envdp \divide\c@tmpb by2% Breite/Hoehe geteilt durch 2
\d@tmpa=2\fboxsep \advance\d@tmpa by\@wholewidth
\c@xoff=\d@tmpa \divide\c@xoff by65536%
\advance\d@tmpa by\dp\env@box
\c@yoff=\d@tmpa \divide\c@yoff by65536%
\unitlength 1pt\noindent
\begin{picture}(\c@breite,\c@hoehe)(0,0)
\put(\c@tmpa,\c@tmpb){\oval(\c@hsize,\c@envdp)}
\put(\c@xoff,\c@yoff){\box\env@box}%
\end{picture}%
}